卷积网络
convolutional network,也叫做卷积神经网络
convolutional neural network CNN
专门用来处理类似网格结构数据的神经网络.
比如
- 时间序列,轴上的一维网格
- 图像数据,二维像素网格
我们把至少在网络中一层中使用卷积运算来替代一般的矩阵乘法运算的神经网络 称为 卷积网络
卷积 convolution
CNN中用到的卷积和其他领域的定义并不完全一致
关于数学概念,参考这里如何通俗易懂地解释卷积?
卷积公式
卷积运算通常用星号表示
在卷积网络的术语中,卷积的第一个参数(函数x)通常叫做输入(input),第二个参数(函数w)叫做核函数(kernel function).输出有时被称作特征映射(feature map)
在模型检测的文章里经常会提到feature map,所以这个要记住
上面求积分是考虑连续的情况,离散的卷积如下:
在机器学习中,输入通常是多维数组(Tensor),而核通常是由学习算法优化得到的多维数组的参数.
因为在输入与核中的每一个元素都必须明确地分开存储,我们通常假设在存储了数值的有限点集以外,这
些函数的值都为零。这意味着在实际操作中,我们可以通过对有限个数组元素的求和来实现无限求和。
这句话我的理解是,以图像为例,处理图像边界会扩展图片尺寸,扩展的部分都用0填充.”无限求和”就不太清楚了.
提到图片,二维输入配上二维核的卷积:
卷积是可交换(commutative)的,公式等价为
公式怎么理解?
可交换性是因为将核相对输入进行了翻转,从m增大角度看,输入索引增大,核的索引在减小.这个性质在神经网络并不是重要的性质.
通常,下面的式子在机器学习库中实现更简单,因为m和n的有效取值范围相对较小,称为互相关函数(cross-correlation),和卷积运算几乎一样但没有对核翻转:
动机
卷积运算通过三个重要思想改进机器学习系统:
- 稀疏交互 sparse interactions
- 参数共享 parameter sharing
- 等变表示 equivariant representations
传统神经网络使用矩阵乘法建立输入输出的连接关系(也就是全连接),然而卷积网络具有稀疏交互的特征.使核的大小远小于输入大小完成.我们用小的核检测那些小的且有意义的特征.
这样,意味着:
- 存储参数更少,减少模型存储需求,提高统计效率
- 计算量减少,效率提高
图中稀疏连接,图中输出单元$g_{3}$只受到$h_{2},h_{3},h_{4}$的影响,它们称为$g_{3}$的接受域receptive field也叫做感受野
处于卷积更深层网络层的单元,它们的感受野比浅层的更大.这意味着,卷积网络中深层单元可以间接连接到全部或者大部分输入图像.
参数共享是指在一个模型的多个函数中使用相同的参数.
传统神经网络,权重矩阵每个元素只用一次.而用卷积,用于一个输入的权重也会绑定在其他权重上.相当于学会一套权重,应用于所有输入位置上.
参数共享的形式使得神经网络具有对平移等变性.
如果一个函数满足输入改变,输出也以同样方式改变这一性质,就认为其是等变的.
公式表示就不展示了,用实际例子说明一下:
- 一维情况,比如时间序列,通过卷积可以得到由输入中出现不同特征的时刻组成的时间轴.如果把一个输入事件延后,输出中仍然会有相同表示,只是时间延后了
- 二维,卷积产生一个二维映射表明某些特征在输入中出现的位置.如果移动输入中的对象,它的表示也会在输出中移动同样的量.
池化
池化函数使用某一位置的相邻输出的总体统计特征来代替网络在该位置的输出.
常用的有最大池化,相邻矩形区域平均值,L2范数以及基于据中心像素距离加权平均.
不管哪种池化,当输入发生少量平移,池化可以帮助输入表示近似不变,即大多数输出不会发生改变.
局部平移不变性是一个很有用的性质,尤其是当我们关心某个特征是否出现
而不关心它出现的具体位置时
如图,最大池化引入不变性.下面一行全部变化,上面一行输出只变了一半.
使用池化可以看做是增加了一个无限强的先验:这一层学得的函数必须具有对少量平移的不变性.
因为池化综合了全部邻居的反馈,这使得池化单元少于探测单元成为可能,我们可以通过综合池化区域的 k 个像素的统计特征而不是单个像素来实现。
在很多任务中,池化对于处理不同大小的输入具有重要作用。例如我们想对不同大小的图像进行分类时,分类层的输入必须是固定的大小,而这通常通过调整池化区域的偏置大小来实现,这样分类层总是能接收到相同数量的统计特征而不管最初的输入大小了。例如,最终的池化层可能会输出四组综合统计特征,每组对应着图像的一个象限,而与图像的大小无关。
卷积与池化作为一种无限强的先验 (纯理论,完全摘抄)
先验概率分布(prior probability distribution)是一个模型参数的概率分布,它刻画了在我们看到数据之前我们认为什么样的模型是合理的信念。
先验被认为是强或者弱取决于先验中概率密度的集中程度。
弱先验具有较高的熵值,例如方差很大的高斯分布。这样的先验允许数据对于参数的改变具有或多或少的自由性
强先验具有较低的熵值,例如方差很小的高斯分布。这样的先验在决定参数最终取值时起着更加积极的作用。
一个无限强的先验需要对一些参数的概率置零并且完全禁止对这些参数赋值,无论数据对于这些参数的值给出了多大的支持。
我们可以把卷积网络类比成全连接网络,但对于这个全连接网络的权重有一个无限强的先验。这个无限强的先验是说一个隐藏单元的权重必须和它邻居的权重相同,但可以在空间上移动。这个先验也要求除了那些处在隐藏单元的小的空间连续的接受域内的权重以外,其余的权重都为零。总之,我们可以把卷积的使用当作是对网络中一层的参数引入了一个无限强的先验概率分布。这个先验说明了该层应该学得的函数只包含局部连接关系并且对平移具有等变性。类似的,使用池化也是一个无限强的先验:每一个单元都具有对少量平移的不变性。
当然,把卷积神经网络当作一个具有无限强先验的全连接网络来实现会导致极大的计算浪费。但把卷积神经网络想成具有无限强先验的全连接网络可以帮助我们更好地洞察卷积神经网络是如何工作的。
其中一个关键的洞察是卷积和池化可能导致欠拟合。与任何其他先验类似,卷积和池化只有当先验的假设合理且正确时才有用。如果一项任务依赖于保存精确的空间信息,那么在所有的特征上使用池化将会增大训练误差。一些卷积网络结构 (Szegedy et al., 2014a) 为了既获得具有较高不变性的特征又获得当平移不变性不合理时不会导致欠拟合的特征,被设计成在一些通道上使用池化而在另一些通道上不使用。当一项任务涉及到要对输入中相隔较远的信息进行合并时,那么卷积所利用的先验可能就不正确了。
另一个关键洞察是当我们比较卷积模型的统计学习表现时,只能以基准中的其他卷积模型作为比较的对象。其他不使用卷积的模型即使我们把图像中的所有像素点都置换后依然有可能进行学习。对于许多图像数据集,还有一些分别的基准,有些是针对那些具有 置换不变性(permutation invariant)并且必须通过学习发现拓扑结构的模型,还有一些是针对模型设计者将空间关系的知识植入了它们的模型。
基本卷积函数的变体
首先,当我们提到神经网络中的卷积时,我们通常是指由多个并行卷积组成的运算。这是因为具有单个核的卷积只能提取一种类型的特征,尽管它作用在多个空间位置上。所以可以看到,很多卷积网络每一层都会有256个或者其他数目的卷积核,都是为了尽量多地提取特征.
另外,输入通常也不仅仅是实值的网格,而是由一系列观测数据的向量构成的网格。比如图像,除了宽高维度,还有颜色通道.
因为卷积网络通常使用多通道的卷积,所以即使使用了核翻转,也不一定保证网络的线性运算是可交换的。只有当其中的每个运算的输出和输入具有相同的通道数时,这些多通道的运算才是可交换的
零填充(英文和TF中参数一样,记住对编程有帮助):
有效卷积 valid
无论怎样都不使用零填充.输出像素更加规范,但导致每一层网络都在减小.
相同卷积 same
用足够的零填充保持输入输出具有相同的大小.但边界像素欠表示
全卷积 full (很少用)
进行足够的零填充,保证每个像素在每个方向上被访问相同次数.导致输出靠近边界部分比中间部分是更少像素的函数,学得一个在所有位置都表现良好的核难度加大.
在一些情况下,我们并不是真的想使用卷积,而是想用一些局部连接的网络层。在这种情况下,我们的多层感知机对应的邻接矩阵是相同的,但每一个连接都有它自己的权重.这有时也被称为 非共享卷积(unshared convolution),因为它和具有一个小核的离散卷积运算很像,但并不横跨位置来共享参数。
当我们知道每一个特征都是一小块空间的函数并且相同的特征不会出现在所有的空间上时,局部连接层是很有用的。例如,如果我们想要辨别一张图片是否是人脸图像时,我们只需要去寻找嘴是否在图像下半部分即可。